/**
 * Ceicei.com Inc.
 * Copyright (c) 2004-2012 All Rights Reserved.
 */
package com.ceicei.taobaoke.api.shangpin;

import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.ceicei.project.dal.dataobject.CeiceiItemDO;
import com.ceicei.project.dal.dataobject.CeiceiItemsPriceLogDO;
import com.ceicei.taobaoke.TaobaoMain;
import com.ceicei.taobaoke.api.util.BaseTaoApiRequestTest;
import com.ceicei.util.CeiceiConstants;
import com.ceicei.util.TaobaoResultCode;
import com.taobao.api.domain.Item;
import com.taobao.api.request.ItemGetRequest;
import com.taobao.api.response.ItemGetResponse;
import com.zhz.project.common.util.alibaba.StringUtil;

/**
 *
 * @author 李威-liwei2672@gmail.com
 * @version $Id: ItemGetTest.java, v 0.1 2012-4-18 下午04:04:36 李威 Exp $
 */
public class ItemGetTest extends BaseTaoApiRequestTest {
    private static Log logger = LogFactory.getLog(ItemGetTest.class);

    /***
    public static void main(String[] args) {
        ItemGetTest go = new ItemGetTest();
        logger.info("ItemGetTest=========================BEGIN=========================");
        logger.info(new Date());

        go.init();

        logger.info("ItemGetTest=========================END=========================");
        logger.info(new Date());
    }
    ***/

    /**
     * 调用淘宝API，获取并保存该商品的价格信息
     *
     * @param ceiceiItemDO
     * @param single 
     */
    public TaobaoResultCode callTaobaoAPI(CeiceiItemDO ceiceiItemDO, boolean single) {
        try {
            //每个商品处理前睡眠
            waitSomeTime(500);

            //构造Request
            ItemGetRequest req = new ItemGetRequest();
            req.setNumIid(ceiceiItemDO.getUrlId());
            req.setFields("price");

            ItemGetResponse

            response = client.execute(req);

            //调用成功
            if (response.isSuccess() && response.getItem() != null) {

                Item item = response.getItem();
                String str = item.getPrice();

                if (StringUtil.isBlank(str)) {
                    return TaobaoResultCode.EXCEPTION;
                }
                Float price = Float.parseFloat(str);
                savePrice(ceiceiItemDO.getItemid(), price, ceiceiItemDO.getSource(), single);
                return TaobaoResultCode.SUCCESS;
            }
            //商品不存在
            else if (StringUtil.equals(response.getErrorCode(), CeiceiConstants.ERROR_CODE_15)) {
                //                logger.error("商品价格处理-未成功" + ceiceiItemDO.getItemid() + "\t商品不存在");
                TaobaoMain.producterrorList
                    .add("商品价格处理-未成功" + ceiceiItemDO.getItemid() + "\t商品不存在");
                return TaobaoResultCode.NOT_EXIST;
            }
            //调用次数超过规定
            else if (StringUtil.equals(response.getErrorCode(), CeiceiConstants.ERROR_CODE_7)) {
                waitSomeTime(1500);
                //                logger.error("商品价格处理-未成功" + ceiceiItemDO.getItemid() + "\t调用次数超过规定");
                //                TaobaoMain.producterrorList.add("商品价格处理-未成功" + ceiceiItemDO.getItemid()
                //                                                + "\t调用次数超过规定");
                return TaobaoResultCode.ACCESS_CONTROL_LIMITED;
            } //该商品已被删除
            else if (StringUtil.equals(response.getErrorCode(), CeiceiConstants.ERROR_CODE_530)) {
                //                logger.error("商品价格处理-未成功" + ceiceiItemDO.getItemid() + "\t该商品已被删除");
                TaobaoMain.producterrorList.add("商品价格处理-未成功" + ceiceiItemDO.getItemid()
                                                + "\t该商品已被删除");
                return TaobaoResultCode.DELETED;
            } else {
                //                logger.error("商品价格处理-未成功" + ceiceiItemDO.getItemid() + "\t"
                //                             + ceiceiItemDO.getUrlId() + "\t" + response.getErrorCode() + "\t"
                //                             + response.getBody());
                TaobaoMain.producterrorList.add("商品价格处理-未成功" + ceiceiItemDO.getItemid() + "\t"
                                                + ceiceiItemDO.getUrlId() + "\t"
                                                + response.getErrorCode() + "\t"
                                                + response.getBody());
                //调用失败，睡眠1s
                waitSomeTime(1000);
            }

        } catch (Exception e) {
            logger.error("调用淘宝API时发生异常", e);
        }
        return TaobaoResultCode.EXCEPTION;

    }

    /**
     * 
     * 保存获取的最新价格
     *
     * @param itemid
     * @param price
     * @param source
     * @param single 
     * @return
     */
    private void savePrice(int itemid, Float price, String source, boolean single) {
        //查看最后一次的价格
        CeiceiItemsPriceLogDO old = ceiceiItemsPriceLogDAO.getLastPriceByItemid(itemid);

        //不为空且价格没有变动，不需要处理
        if (old != null && price == old.getPrice()) {
            TaobaoMain.noproductpricechangeList.add("商品价格没有变化，不插入ceicei_items_price_log:" + itemid
                                                    + "\t" + price);
            //            logger.error("商品价格处理:" + itemid + "\t" + price + "\t价格没有变化，不插入该价格");
            return;
        }
        TaobaoMain.productpricechangeList.add("商品价格有变化-插入ceicei_items_price_log:" + itemid + "\t"
                                              + price);
        //        logger.info("商品价格有变化:" + itemid + "\t" + price);

        //其他情況下需要插入新的价格 
        CeiceiItemsPriceLogDO ceiceiItemsPriceLogDO = new CeiceiItemsPriceLogDO();

        ceiceiItemsPriceLogDO.setItemid(itemid);
        ceiceiItemsPriceLogDO.setPrice(price);
        ceiceiItemsPriceLogDO.setPriceType(CeiceiConstants.price_type_normal);
        ceiceiItemsPriceLogDO.setSource(source);
        ceiceiItemsPriceLogDO.setCreatetime(new Date());
        if (single) {
            ceiceiItemsPriceLogDO.setSmsed(CeiceiConstants.SMSED_NO_NEED);
            ceiceiItemsPriceLogDO.setMailed(CeiceiConstants.MAILED_NO_NEED);
        }
        ceiceiItemsPriceLogDAO.insert(ceiceiItemsPriceLogDO);

    }
}
